#include "GestoreBuffer.hpp"

//Costruttore
GestoreBuffer :: GestoreBuffer ( config_s conf , stats s ) :
    //Inizializzo tutte le classi interne:
    //Classe IRC
    irconn( conf.descrittoreIrc ),
    //Classe Skype
    skypeconn ( conf.skypeChannel ),
    //La configurazione delle connessioni
    config ( conf ),
    //Le statistiche di skype2irc++
    statistiche ( s ) {
        
        //Genero il thread di ascolto di IRC
    	pthread_create ( &threadIrc , NULL , ThreadIrc , NULL );
    	//Lancio il thread
    	pthread_join ( threadIrc , NULL );
}

//Distruttore
GestoreBuffer :: ~GestoreBuffer () {
    //Invio in entrambi i canali il messaggio di chiusura
    irconn.Send("skype2irc","Terminazione del bridge!");
    skypeconn.Send("skype2irc","Terminazione del bridge!");
    //Chiudo il processo di ricezione IRC nel thread
    pthread_kill ( threadIrc , NULL );
}


void GestoreBuffer :: TuaNonnaGobba ( string msg , string canale ) {
    string mittente, messaggio;
    //Elaboro la stringa
    if ( canale == "IRC" ) {
        //Elaborazione del messaggio proveniente da IRC
        //Formattazione messaggio iniziale:
        // ":$mittente!~$identificativoUtente PRIVMSG $canaleRicezione :$messaggio"
        unsigned len_mitt = msg.find_first_of('!',1) - 1 ; //il nome mittente è contenuto entro il primo '!'
        mittente = msg.substr(1,len_mit);
        unsigned len_msg = msg.lenght() - msg.first_of(':',1);
        messaggio = msg.substr(msg.first_of(':',1), len_msg );  //Il messaggio inizia con ':'
    } 
    else {
        //Elaborazione del messaggio proveniente da Skype
        //Formattazione messaggio iniziale:
        // ""
    }
    //Elaborzione delle informazione e applicazione parametri/criteri del bridge
    
    //Invio nel canale di destinazione
    if ( canale == "IRC" ) {
        skypeconn.Send ( mittente, messaggio );
    } 
    else {
        irconn.Send (  mittente, messaggio );
    }
    //Elaboro le statistiche
}

//Banalissimo!
void GestoreBuffer :: ThreadIrc () {
    while ( true ) {
        TuaNonnaGobba ( irconn.Read() , "IRC" );
    }
}
